Make gtk_window_set_titlebar work on realized windows
authorMatthias Clasen <mclasen@redhat.com>
Tue, 4 Feb 2014 03:38:06 +0000 (22:38 -0500)
committerMatthias Clasen <mclasen@redhat.com>
Tue, 4 Feb 2014 03:38:06 +0000 (22:38 -0500)
Since realize does a lot of the heavy lifting of setting up
csd, we have to re-realize the window if we go from no-custom
titlebar to a custom titlebar or vice versa.

https://bugzilla.gnome.org/show_bug.cgi?id=722919

gtk/gtkwindow.c

index 3605f5a64a81d6e801251a83055976c4e153e7bc..ea281fe430b2df007864190b7132ebe0e79ab079 100644 (file)
@@ -3686,9 +3686,17 @@ gtk_window_set_titlebar (GtkWindow *window,
 
   g_return_if_fail (GTK_IS_WINDOW (window));
 
-  was_mapped = gtk_widget_get_mapped (widget);
-  if (gtk_widget_get_realized (widget))
-    gtk_widget_unrealize (widget);
+  if ((!priv->title_box && titlebar) || (priv->title_box && !titlebar))
+    {
+      was_mapped = gtk_widget_get_mapped (widget);
+      if (gtk_widget_get_realized (widget))
+        {
+          g_warning ("gtk_window_set_titlebar() called on a realized window");
+          gtk_widget_unrealize (widget);
+        }
+    }
+  else
+    was_mapped = FALSE;
 
   unset_titlebar (window);